package com.hengpeng.common.util;

import java.math.BigDecimal;

/**
 * <pre>
 * 金额运算工具类
 * </pre>
 * @author chenjian
 * @version 1.0, 2010-10-9
 */
public class MoneyUtil
{
	private MoneyUtil()
	{
	}

	/**
	 * <pre>
	 * 元转换为分
	 * </pre>
	 * @param money
	 * @return int
	 */
	public static int convertYuanToFen(Double money)
	{
		if (money == null)
		{
			return 0;
		}
		BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal multiply = decimal.multiply(decimal2);
        return multiply.intValue();
	}

	/**
	 * <pre>
	 * 元转换为分
	 * </pre>
	 * @param money
	 * @return Long
	 */
	public static long convertLongYuanToFen(Double money)
	{
		if (money == null)
		{
			return 0;
		}
		BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal multiply = decimal.multiply(decimal2);
        return multiply.longValue();
	}

	/**
	 * <pre>
	 * 元转换为分
	 * </pre>
	 * @param money
	 * @return
	 */
	public static long convertLongYuanToFen(Long money)
	{
		if (money == null)
		{
			return 0;
		}
		BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal multiply = decimal.multiply(decimal2);
        return multiply.longValue();
	}

	/**
	 * <pre>
	 * 元转换为分
	 * </pre>
	 * @param money
	 * @return
	 */
	public static Integer convertYuanToFen(Integer money)
	{
		if (money == null)
		{
			return 0;
		}
		BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal multiply = decimal.multiply(decimal2);
        return multiply.intValue();
	}

	/**
	 * <pre>
	 * 分转换为元
	 * </pre>
	 * @param money
	 * @return
	 */
	public static String convertFenToYuan(Integer money)
	{
		if (money == null)
		{
		    return "0.00";
		}    
		BigDecimal decimal = new BigDecimal(money);
	    BigDecimal decimal2 = new BigDecimal(100);
	    BigDecimal divide = decimal.divide(decimal2, 2, BigDecimal.ROUND_HALF_UP);
	    return divide.toString();
	}

	/**
	 * <pre>
	 * 分转换为元
	 * </pre>
	 * @param money
	 * @return
	 */
	public static String convertFenToYuan(Long money)
	{
		if (money == null)
		{
		    return "0.00";
		}
		BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal divide = decimal.divide(decimal2, 2, BigDecimal.ROUND_HALF_UP);
        return divide.toString();
	}
	
	/**
     * <pre>
     * 分转换为元
     * </pre>
     * @param money
     * @return
     */
    public static String convertFenToYuanDouble(Double money)
    {
        if (money == null)
        {
            return "0.00";
        }
        BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal divide = decimal.divide(decimal2, 2, BigDecimal.ROUND_HALF_UP);
        return divide.toString();
    }

	/**
	 * <pre>
	 * 分转换为元
	 * </pre>
	 * @param money
	 * @return
	 */
	public static double convertFenToYuanDouble(Long money)
	{
		if (money == null)
		{
		    return 0D;
		}
		BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal divide = decimal.divide(decimal2, 99, BigDecimal.ROUND_HALF_UP);
        return divide.doubleValue();
	}

	/**
	 * <pre>
	 * 分转换为元
	 * </pre>
	 * @param money
	 * @return
	 */
	public static Integer convertIntFenToYuan(Integer money)
	{
	    if (money == null)
	    {
            return 0;
        }
        BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal divide = decimal.divide(decimal2, 99, BigDecimal.ROUND_HALF_UP);
        return divide.intValue();
	}

	/**
	 * <pre>
	 * 分转换为元
	 * </pre>
	 * @param money
	 * @return
	 */
	public static Long convertLongFenToYuan(Long money)
	{
	    if (money == null)
	    {
            return 0L;
        }
        BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal divide = decimal.divide(decimal2, 99, BigDecimal.ROUND_HALF_UP);
        return divide.longValue();
	}

	public static Double convertFenToYuanNum(Integer money)
	{
	    if (money == null)
	    {
            return 0D;
        }
        BigDecimal decimal = new BigDecimal(money);
        BigDecimal decimal2 = new BigDecimal(100);
        BigDecimal divide = decimal.divide(decimal2, 99, BigDecimal.ROUND_HALF_UP);
        return divide.doubleValue();
	}

	/**
	 * <pre>
	 * 金额相加
	 * </pre>
	 * @param num1
	 * @param num2
	 * @return
	 */
	public static double add(double num1, double num2)
	{
		BigDecimal n1 = new BigDecimal(Double.toString(num1));
		BigDecimal n2 = new BigDecimal(Double.toString(num2));
		return n1.add(n2).doubleValue();
	}

	/**
	 * <pre>
	 * 金额相减
	 * </pre>
	 * @param num1 减数
	 * @param num2 被减数
	 * @return 差值
	 */
	public static double sub(double num1, double num2)
	{
		BigDecimal n1 = new BigDecimal(Double.toString(num1));
		BigDecimal n2 = new BigDecimal(Double.toString(num2));
		return n1.subtract(n2).doubleValue();
	}

	public static void main(String args[])
	{
		System.out.println(convertFenToYuan(2000000l));
		System.out.println(convertLongYuanToFen(0.11d));
		System.out.println(convertYuanToFen(0.00d));
		System.out.println(convertFenToYuanNum(1));
		System.out.println((convertYuanToFen(0.10d) * 1) / 1000);
	}
}
